七、系统使用说明
7.1 主要接口使用
7.1.1 接口概述
AIBOX 设备通过凤凰端子提供标准工业接口,支持快速接入和使用,全部信号均为 3.3 V 逻辑电平。相关接口布局图如下:
接口功能定义表:
| 接口类别 | 端子标识 | 功能描述 |
|---|---|---|
| 电源 | 3.3V、GND | 含参考电压 VREF_3P3 |
| GPIO | IN1、IN2、OUT1、OUT2 | 通用输入/输出数字接口 |
| RELAY | NO、COM、NC | 继电器常开/常闭触点接口 |
| CAN | CL、CH | CAN 总线差分信号接口 |
| RS232 | RX、TX | RS232 全双工串行通信接口 |
| RS485 | 1A、1B、2A、2B | RS485 半双工串行通信接口 |
7.1.2 GPIO 使用
AIBOX 设备提供两组独立的 GPIO 输入/输出接口,具体定义如下:
| 端子名称 | GPIO编号 | 方向 | 功能描述 |
|---|---|---|---|
| IN2 | GPIO5 | 输入 | 数字信号输入接口 |
| IN1 | GPIO6 | 输入 | 数字信号输入接口 |
| OUT1 | GPIO12 | 输出 | 数字信号输出接口 |
| OUT2 | GPIO98 | 输出 | 数字信号输出接口 |
以 GPIO12 输出为例:
- 导出 GPIO:将 GPIO 节点导出到
/sys/class/gpio/export。
echo 12 > /sys/class/gpio/export
- 设置 GPIO 方向:设置为输入或输出。
echo out > /sys/class/gpio/gpio12/direction
- 读写 GPIO 值
echo 1 > /sys/class/gpio/gpio12/value # 设置为高电平
cat /sys/class/gpio/gpio12/value # 读取当前值
芯片支持三组 GPIO ,分别命名为 SAP GPIO,CPU GPIO 和 RTC GPIO。在每个 GPIO 组内对信号从 0 开始编址,称为物理编号,此外,软件还对全部 GPIO 信号做了统一编址,称为逻辑编号,其编号规则是
GPIO 逻辑编号 = GPIO 所属组 BASE 号 + 组内物理编号
可以使用 SDK 镜像 中的 40pin_sample.py 测试文件对 GPIO 管脚进行电平测试。
该测试脚本的目录为:
/ta-vsp/ta-samples/taco_40pin_sample/40pin_sample.py
将 40pin_sample.py 测试脚本复制到板端:
scp 40pin_sample.py root@ip:/usr/local/bin
通过以下步骤对 GPIO79 进行电平测试:
root@taco-mes20:/usr/local/bin# python3 40pin_sample.py -t gpio
==== Starting GPIO Manual Control Test ====
Please enter GPIO domain (cpu/rtc/sap):cpu
Please enter base GPIO number (domain cpu):79
GPIO manual control mode:
Commands:'1' to set high, '0' to set low,'q' to quit
Enter command (1/0/q):1
GPI0279 set to 1, verified value: 1
Enter command (1/0/q): 0
GPI0279 set to 0, verified value: 0
Enter command (1/0/q):q
Exiting GPIO control
=== GPIO Test Completed =====
7.1.3 RS485 使用
AIBOX 通过 MAX348 半双工收发器,将 UART5 转换为 RS485 差分总线,并引出两路独立总线(RS485_1、RS485_2),方便冗余或级联。
| Signal | Function | 方向 | 备注 |
|---|---|---|---|
| RS485_1A | 差分 A | I/O | 总线 1 |
| RS485_1B | 差分 B | I/O | 总线 1 |
| RS485_2A | 差分 A | I/O | 总线 2 |
| RS485_2B | 差分 B | I/O | 总线 2 |
用户通过 --send-port 和 --recv-port 指定发送端和接收端端口(支持编号或路径),脚本自动解析并建立连接:
python3 40pin_sample.py -t serial --rs485 --send-port 2 --recv-port 8 --baudrate 9600
输出示例:
===== Starting RS485 Interconnect Test =====
Successfully opened serial port: /dev/ttyPS2
Parameters: Baudrate=9600, Data bits=8, Parity=N, Stop bits=1
Successfully opened serial port: /dev/ttyPS8
Parameters: Baudrate=9600, Data bits=8, Parity=N, Stop bits=1
Test data: RS485 Interconnect Test
Sending port: /dev/ttyPS2, Receiving port: /dev/ttyPS8
[00:02:56.014] Sent data (23 bytes):
Hex: 52 53 34 38 35 20 49 6e 74 65 72 63 6f 6e 6e 65 63 74 20 54 65 73 74
ASCII: RS485 Interconnect Test
[00:02:56.516] Received data (23 bytes):
Hex: 52 53 34 38 35 20 49 6e 74 65 72 63 6f 6e 6e 65 63 74 20 54 65 73 74
ASCII: RS485 Interconnect Test
Test: Success
===== RS485 Interconnect Test Result =====
Total tests: 1, Success: 1, Failed: 0
Serial port closed
Serial port closed
7.1.4 RS232 使用
AIBOX 通过 SP3232 将 UART5 的 TTL 信号转换为 RS232 电平( ±5V 左右),并引到 J23 端子。用跳线短接板端 J23-11 (RS232_TX) 与 J23-13 (RS232_RX),即可形成自发自收通道。
| Signal | Function | 方向(DTE 视角) | 实际 TTL 源 |
|---|---|---|---|
| RS232_TX | 发送数据 | 输出 | UART5_TXD |
| RS232_RX | 接收数据 | 输入 | UART5_RXD |
用于验证单个 RS232 串口的发送与接收功能(需硬件短接 TX / RX 引脚)。支持配置串口号、波特率与数据传输内容。
python3 40pin_sample.py -t serial --rs232 --port 1 --baudrate 115200 --data "Custom Test"
输出示例:
===== Starting RS232 Loopback Test =====
Successfully opened serial port: /dev/ttyPS1
Parameters: Baudrate=115200, Data bits=8, Parity=N, Stop bits=1
Test data: Custom Test
[00:04:39.932] Sent data (11 bytes):
Hex: 43 75 73 74 6f 6d 20 54 65 73 74
ASCII: Custom Test
[00:04:40.133] Received data (11 bytes):
Hex: 43 75 73 74 6f 6d 20 54 65 73 74
ASCII: Custom Test
Test: Success
===== RS232 Loopback Test Result =====
Total tests: 1, Success: 1, Failed: 0
Serial port closed
7.1.5 RELAY 使用
RELAY 是一个用于控制继电器的模块。该功能通过操作指定的 GPIO 引脚来控制继电器的吸合(ON)与释放(OFF)状态,并检测实际操作是否成功,适用于验证继电器硬件及控制链路的完整性。
| Signal | Function | 备注 |
|---|---|---|
| NO | 继电器常开触点 | - |
| COM | 继电器公共端 | 最大 2 A 30 V |
| NC | 继电器常闭触点 | - |
工作原理:
- 配置GPIO引脚为输出模式
- 控制GPIO输出高电平,使继电器吸合(ON 状态)
- 控制GPIO输出低电平,使继电器释放(OFF 状态)
通过 GPIO 控制继电器的开关状态(ON / OFF),并验证输出电平是否符合预期,对应硬件继电器的吸合与断开功能测试。
直接通过命令行启动测试:
python3 40pin_sample.py -t relay
输出示例:
===== Starting Relay Test =====
Exporting GPIO276...
Setting GPIO276 as output...
Testing relay ON (set value 1)...
Relay ON test: Success
Testing relay OFF (set value 0)...
Relay OFF test: Success
===== Relay Test Result =====
All relay tests passed
7.1.6 CAN 总线使用
CAN 总线是一种用于数据传输的异步通信协议,它使用双工的通信方式,允许多个设备之间进行数据传输。
| Signal Name | Function | Electrical Specs |
|---|---|---|
| CH | CAN 差分 H | 内部已接 120 Ω 终端 |
| CL | CAN 差分 L | 内部已接 120 Ω 终端 |
CAN 测试通过以下步骤实现: 配置 CAN 接口(设置为 DOWN 状态 -> 配置波特率 -> 设置为 UP 状态) 创建并绑定 CAN 原始套接字 发送测试:构造标准 CAN 帧并发送到总线上 接收测试:监听总线上的 CAN 消息并统计接收数量
支持配置 CAN 总线接口以及比特率,对应的参数为 --can-interface 和 --can-bitrate。
CAN 总线发送命令:
python3 40pin_sample.py -t can --can-send --can-interface can0 --can-bitrate 500000
执行流程:
- 配置 can0 接口为 500000 波特率
- 创建 CAN 套接字并绑定到 can0
- 发送测试数据帧(ID=0x123,数据=[0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07])
- 输出发送结果并关闭套接字
CAN 总线接收命令:
python3 40pin_sample.py -t can --can-receive --can-interface can0 --can-duration 30
执行流程:
- 配置 CAN 接口 can0 为指定波特率
- 创建 CAN 套接字并绑定到 can0
- 在 30 秒内监听 CAN 消息(最多接收 20 条)
- 输出接收统计结果并关闭套接字
7.2 查询硬件温度
使用命令 cat /sys/class/thermal/thermal_zone0/temp 获取 SoC 芯片温度。该命令返回的温度数值单位为毫摄氏度(mC)。
root@taco-mes20:~# cat /sys/class/thermal/thermal_zone0/temp
26816
上述命令返回的数值 26816 表示芯片温度为 26.816°C。
使用命令 cat /sys/class/thermal/thermal_zone1/temp 获取核心板温度。该命令返回的温度数值单位同样为毫摄氏度(mC)。
root@taco-mes20:~# cat /sys/class/thermal/thermal_zone1/temp
30250
7.3 查询内存信息
AIBOX 板载了 14GB DDR,可以分为三类:
- OS 管理的部分,即可以用
malloc、kmalloc等常规 API 分配出来使用。
root@taco-mes20:~# free -h
total used free shared buff/cache available
Mem: 3.8Gi 132Mi 3.6Gi 988Ki 110Mi 3.6Gi
Swap: 0B 0B 0B
- taco-sys 管理的部分,预留给 NPU、VENC、VDEC 使用,需要使用
libtacosys.so库接口使用,可通过启动介质中bootfs分区里config.txt配置(默认值是8G),可以按需修改:
########## Memory Configuration ##########
# Uncomment this to set tacosys memory address to 0x140000000,
# and size to 0x80000000 bytes (2GiB)
# tacosys_mem_addr=0x140000000
# tacosys_mem_size=0x80000000
下面是一些使用 libtacosys 接口的实例代码,调用 npu_usage_t 和 cpu_usage_t 结构体来获取使用情况:
taco_npu_usage_t npu_usage = {0};
if (taco_sys_get_npu_usage(&npu_usage) == TACO_SUCCESS) {
printf("NPU Usage: %d%%\n", npu_usage.npu_usage);
} else {
printf("Failed to get NPU usage\n");
}
taco_cpu_usage_t cpu_usage = {0};
if (taco_sys_get_cpu_usage(&cpu_usage) == TACO_SUCCESS) {
printf("Total CPU Usage: %d%%\n", cpu_usage.total_cpu_usage);
for (int i = 0; i < 8; i++) {
printf("CPU%d Usage: %d%%\n", i, cpu_usage.cpu_usage[i]);
}
} else {
printf("Failed to get CPU usage\n");
}
- NPU 管理的部分,专门预留给 NPU(下面所示是注释掉的默认值),可以按需修改:
# Uncomment this to set npu memory address to 0x1c0000000,
# and size to 0x280000000 bytes (10GiB)
# npu_mem_addr=0x1c0000000
# npu_mem_size=0x280000000
这些命令将显示 tacosys 和 NPU 内存的实际分配情况。要验证配置是否生效,可以通过重启设备并再次检查这些文件的内容。
AIBOX 板载了 14GB DDR,可以分为三类:
- OS 管理的部分,即可以用
malloc、kmalloc等常规 API 分配出来使用。
root@taco-mes20:~# free -h
total used free shared buff/cache available
Mem: 9.6Gi 268Mi 9.3Gi 1.1Mi 121Mi 9.4Gi
Swap: 0B 0B 0B
- taco-sys 管理的部分,预留给 NPU、VENC、VDEC 使用,需要使用
libtacosys.so库接口使用,可通过启动介质中bootfs分区里config.txt配置(下面所示是注释掉的默认值),可以按需修改:
########## Memory Configuration ##########
# Uncomment this to set tacosys memory address to 0x140000000,
# and size to 0x80000000 bytes (2GiB)
# tacosys_mem_addr=0x140000000
# tacosys_mem_size=0x80000000
下面是一些使用 libtacosys 接口的实例代码,调用 npu_usage_t 和 cpu_usage_t 结构体来获取使用情况:
taco_npu_usage_t npu_usage = {0};
if (taco_sys_get_npu_usage(&npu_usage) == TACO_SUCCESS) {
printf("NPU Usage: %d%%\n", npu_usage.npu_usage);
} else {
printf("Failed to get NPU usage\n");
}
taco_cpu_usage_t cpu_usage = {0};
if (taco_sys_get_cpu_usage(&cpu_usage) == TACO_SUCCESS) {
printf("Total CPU Usage: %d%%\n", cpu_usage.total_cpu_usage);
for (int i = 0; i < 8; i++) {
printf("CPU%d Usage: %d%%\n", i, cpu_usage.cpu_usage[i]);
}
} else {
printf("Failed to get CPU usage\n");
}
- NPU 管理的部分,专门预留给 NPU(下面所示是注释掉的默认值),可以按需修改:
# Uncomment this to set npu memory address to 0x1c0000000,
# and size to 0x280000000 bytes (10GiB)
# npu_mem_addr=0x1c0000000
# npu_mem_size=0x280000000
这些命令将显示 tacosys 和 NPU 内存的实际分配情况。要验证配置是否生效,可以通过重启设备并再次检查这些文件的内容。